package homework;


import java.util.Scanner;

public class PlayChess {



    public void show( int [][] nums){
        //打印棋盘
        for(int i=0;i<nums.length;i++) {
            for(int j=0;j<nums.length;j++) {
                System.out.print(nums[i][j]+"	");
            }
            System.out.println();
            //System.out.println();
        }
    }

    public boolean  point(int [][] nums, int color){

        Scanner input = new Scanner(System.in);
        int[]  Point = new int[2];        //建立一个数组存放黑方下子坐标

        boolean v = true;

        while(v){
            if (color ==1){
                System.out.println("请黑方下子（请输入下子的坐标）：");
            } else {
                System.out.println("请白方下子（请输入下子的坐标）：");
            }

            for(int i = 0;i<Point.length;i++) {
                Point[i] = input.nextInt();
            }

            if(nums[Point[0]][Point[1]]==0) {  //  如果此处没有落子
                nums[Point[0]][Point[1]] = color;
                //在此处插入判断条件
                v = victory(nums,Point[0],Point[1]);
                if(v==false) {
                    if (color == 1){
                        System.out.println("黑方胜利！！");
                    } else {
                        System.out.println("白方胜利！！");
                    }
                    return true;
                }
                return false;
            }else if(Point[1]==0 || Point[0]==0 || Point[1]>=nums.length ||  Point[0]>=nums.length){
                System.out.println("您的坐标输入有误！请重新输入！");
                continue;
            }else {
                System.out.println("该位置已有子！请重新输入！");
                continue;
            }
        }
        return false;
    }


    public static boolean victory(int[][] nums, int point1,int point2){
        //判断落子的邻近是否可以有形成的五个连续的子
        //如果有即放回false给v;
        int leftNumber = 0;        	 	//定义落子的左边连续相同的个数
        int rightNumber = 0;			//定义落子的右边连续相同的个数

        int upperNumber = 0;			//定义落子的上边连续相同的个数
        int lowerNumber = 0;			//定义落子的下边连续相同的个数

        int leftUpperNumber = 0;		//定义落子的左上连续相同的个数
        int leftLowerNumber = 0;		//定义落子的左下连续相同的个数

        int rightUpperNumber = 0;		//定义落子的右上连续相同的个数
        int rightLowerNumber = 0;		//定义落子的右下连续相同的个数

        for(int i=1;point2-i>0;i++) {   	//往左边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1][point2-i]) {
                leftNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point2+i<nums.length;i++) {   	//往右边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1][point2+i]) {
                rightNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point1-i>0;i++) {   	//往上边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1-i][point2]) {
                upperNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point1+i<nums.length;i++) {   	//往下边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1+i][point2]) {
                lowerNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point1-i>0 && point2-i>0;i++) {   	//往左上边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1-i][point2-i]) {
                leftUpperNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point1+i<nums.length && point2+i<nums.length;i++) {   	//往右下数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1+i][point2+i]) {
                rightLowerNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point2-i>0 && point1+i<nums.length;i++) {   	//往左下边数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1+i][point2-i]) {
                leftLowerNumber++;
            }else {
                break;
            }
        }


        for(int i=1;point2+i<nums.length && point1-i>0;i++) {   	//往右上数有多少个是连续相同的
            if(nums[point1][point2]==nums[point1-i][point2+i]) {
                rightUpperNumber++;
            }else {
                break;
            }
        }


        //判断
        if(leftNumber+rightNumber==4 || upperNumber+lowerNumber==4 || leftUpperNumber+rightLowerNumber==4 || leftLowerNumber+rightUpperNumber==4) {
            return false;
        }else {
            return true;
        }
    }


}
